/**
 * <b>项目名称：</b>网络应用框架<br/>
 * <b>包    名：</b>com.hhwy.framework.util<br/>
 * <b>文 件 名：</b>CheckDBTableFieldExist.java<br/>
 * <b>版本信息：</b><br/>
 * <b>日    期：</b>2016年12月1日-下午6:51:50<br/>
 * <b>Copyright (c)</b> 2016恒华伟业科技股份有限公司-版权所有<br/>
 * 
 */
package com.hhwy.framework.util;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;

import com.alibaba.druid.util.JdbcConstants;
import com.hhwy.framework.cache.Cache;
import com.hhwy.framework.common.Constants;
import com.hhwy.framework.datasource.DatasourceHelper;

 /**
 * <b>类 名 称：</b>CheckDBTableFieldExist<br/>
 * <b>类 描 述：</b><br/>
 * <b>创 建 人：</b>liuhai<br/>
 * <b>修 改 人：</b>liuhai<br/>
 * <b>修改时间：</b>2016年12月1日 下午6:51:50<br/>
 * <b>修改备注：</b><br/>
 * @version 1.0.0<br/>
 */
public class CheckTableField {
	
	private static Logger log = LoggerFactory.getLogger(CheckTableField.class);
	private static JdbcTemplate jdbcTemplate;
	private static String currentDBName;
	static{
		getJdbcTemplate();
		getCurrentDBName();
	}
	
//	public static void checkOrgNo(){
//		List<String> tables = getContainsTargetFieldTables(JdbcConstants.MYSQL, null, Constants.ORG_NO_FIELD_NAME);
//		for(String tableName : tables){
//			String key = JdbcConstants.MYSQL + "." + currentDBName + "." + tableName + "." + Constants.ORG_NO_FIELD_NAME;
//			Cache.setIsDbTableFieldExist(key, true);
//		}
//	}
	
	/**
	 * getContainsTables(获取包含指定字段的所有数据库表名称列表)<br/>
	 * @param dbType：目前只支持mysql
	 * @param dbName:可为空，为空时，数据库名称为默认数据源中数据库名称
	 * @param checkedFieldName：需要检测的字段
	 * @return 
	 * List<String>
	 * @exception 
	 * @since  1.0.0
	 */
	public static List<String> getContainsTargetFieldTables(String dbType, String dbName, String checkedFieldName){
		if(JdbcConstants.MYSQL.equalsIgnoreCase(dbType)){
			String sql = null;
			if(org.apache.commons.lang3.StringUtils.isNotBlank(dbName)){
				sql = "SELECT TABLE_NAME FROM information_schema.columns WHERE column_name = '"+checkedFieldName+"' and table_schema='"+dbName+"'";
			}else{
				sql = "SELECT TABLE_NAME FROM information_schema.columns WHERE column_name = '"+checkedFieldName+"' and table_schema=(select database())";
			}
			
			List<String> tableNames = jdbcTemplate.queryForList(sql, String.class);
			return tableNames;
		}else{
			log.info("暂不支持除mysql以外的数据库");
			return new ArrayList<String>();
		}
	}
	
	private static JdbcTemplate getJdbcTemplate(){
		if(jdbcTemplate == null){
			jdbcTemplate = new JdbcTemplate();
			jdbcTemplate.setDataSource(DatasourceHelper.getDefaultDataSource());
		}
		return jdbcTemplate;
	}
	
	public static String getCurrentDBName(){
		if(currentDBName == null){
			List<String> database = jdbcTemplate.queryForList("select database()", String.class);
			currentDBName = database.get(0);
		}
		return currentDBName;
	}
}
